unit ConnectionU;

interface

uses
  InterfaceConnectionU, InterfaceU;

type

  // 5 - Definisco la classe della factory con:
  //     . Una classe tipizzata alla classe astratta
  //     . Una class function che definisce la connesione con la classe di cui al punto 4 per la creazione delle classi reali
  //     . Delle class function che definiscono la creazione delle classi reali.

  TGestioniFactory = class
  private
    type TConcreteGestioniFactory = class of TAbstractGestioni;

  strict private
    class function GetConcreteGestioniFactory : TConcreteGestioniFactory;
  public
    class function GestioneUtenti : IGestioneUtenti;
    class function GestioneAllegati : IGestioneAllegati;
    class function GestioneMessaggi : IGestioneMessaggi;
    class function GestioneAlunni : IGestioneAlunni;
    class function GestionePagamenti: IGestionePagamenti;
  end;

implementation

uses
  FirebirdConnectionU;


{ TGestioniFactory }

class function TGestioniFactory.GestioneAllegati: IGestioneAllegati;
begin
  result := GetConcreteGestioniFactory.GestioneAllegati;
end;

class function TGestioniFactory.GestioneAlunni: IGestioneAlunni;
begin
  result := GetConcreteGestioniFactory.GestioneAlunni;
end;

class function TGestioniFactory.GestionePagamenti: IGestionePagamenti;
begin
  result := GetConcreteGestioniFactory.GestionePagamenti;
end;

class function TGestioniFactory.GestioneMessaggi: IGestioneMessaggi;
begin
  result := GetConcreteGestioniFactory.GestioneMessaggi;
end;

class function TGestioniFactory.GestioneUtenti: IGestioneUtenti;
begin
  result := GetConcreteGestioniFactory.GestioneUtenti;
end;

class function TGestioniFactory.GetConcreteGestioniFactory: TConcreteGestioniFactory;
begin
  result := TFbGestioniFactory;
end;

end.
